import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 全局单例的一个对象，使用State对象包含了应用中全部的应用层级
  state: {
    user:JSON.parse(sessionStorage.getItem('user')),
    cityname:'北京',
    token:sessionStorage.getItem('token'),  // 保存token
  },
  getters: {
  },
  mutations: {
    /**保存token */
    saveToken(state,token){
      state.token = token
      sessionStorage.setItem('token',token)  
    },
    // 声明一个方法，用于修改state.user数据
    // 在页面中可以通过：$store.commit('updateUser') 方法 向vuex提交一个执行mutation响应的方法的请求
    // vuex接收到该请求，找到updateUser方法，并执行它 
    // 执行该方法时，vuex将会自动传入参数：（$store.state,用户自定义参数）
    updateUser(state,payload){
        state.user=payload
        // 为了数据持久化保存，需要向storage中存一份
        sessionStorage.setItem('user',JSON.stringify(payload))
    }
  },
  actions: {
    // 先发异步请求，获取登录成功的用户信息，更新state
    // 当前方法传入两个参数：（store对象，自定义参数）
    // 当前方法将会在调用：$store.dispatch('loginAndSaveUser',{自定义参数})
    loginAndSaveUser(Store,payload){
      // 发送登录请求
      // ...
      // 获取到登录结果后
      store.commit('updateUser',{ nickname:"测试用户"})
    }
  },
  modules: {
  }
})
